It is advantageous in programmable integrated circuit devices such as field programmable gate array (FPGA) devices to reuse cryptographic hardware for different configurations of hardware in order to save chip space. For example, an interface can be configured to contain more ports at a slower bandwidth (e.g., 100 gigabits per second (“Gbps”) bandwidth divided over 10 ports with 10 Gbps bandwidth each), or to have more bandwidth with fewer ports (e.g., 100 Gbps bandwidth divided over 5 ports with 20 Gbps bandwidth each). In this case, a cryptographic design that can support N ports by M bandwidth should also be able to support M ports by N bandwidth or any number of ports such that the total bandwidth does not exceed the available bandwidth.
However, the cryptographic design will not be able to support such an arrangement if the blocks that make up an authentication engine of the cryptography hardware are not divisible into one another without a remainder. For example, assume that a programmable integrated circuit device has a port which can either be run as a single 100 Gbps port or as ten 10 Gbps ports. Here, the bandwidth is the same through both ports. Also assume that the authentication engine is made up of four engines, each of which has a bandwidth of 25 Gbps. While the 100 Gbps port can be divided into four 25 Gbps portions of bandwidth and delivered to the engine, the scenario with ten 10 Gbps ports cannot.
In the scenario with ten 10 Gbps ports, the inputs must be multiplexed into an appropriate lane of the authentication engine, such that for each clock cycle, four lanes are processed. While such a solution may work for an encryption and decryption stage of this process because these stages do not require feedback, this solution would not work for the authentication portion of the process. This is because the authentication portion produces feedback, which means that data from different ports of the encryption core cannot be fed into the same authentication engine with an expectation that the resulting value is correct.